package pe.com.bbva.ge.utileria;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import pe.com.bbva.ge.domain.seguridad.Opcion;
import pe.com.bbva.ge.domain.seguridad.Usuario;

public abstract class UtileriaComun {
	
	private UtileriaComun(){}
	
	private static final String DEFAULT_DATE_FORMAT = "dd/MM/yyyy";
	
	public static Usuario obtenerUsuarioSesion()
	{
		Usuario usuario = null;
		if(RequestContextHolder.getRequestAttributes()!=null){
			ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
					.currentRequestAttributes();
			HttpServletRequest request = requestAttributes.getRequest();
			HttpSession session = request.getSession(false);
			if(session != null)
			{
				usuario = (Usuario) session.getAttribute(Constante.SESION.USUARIO);
			}	
		}
		return usuario;
	}
	
	public static Map<String, List<Opcion>> ordenarOpciones(final List<Opcion> opciones)
	{
		String padre;
		Map<String, List<Opcion>> map=new HashMap<String, List<Opcion>>();
		for (Opcion opcion : opciones) {
			padre=opcion.getPadre()==null?Constante.OPCION.KEY_PADRE:opcion.getPadre().getCodigo();
			if(map.get(padre)==null){
				List<Opcion> list=new ArrayList<Opcion>();
				list.add(opcion);
				map.put(padre, list);
			}else{
				List<Opcion> list=map.get(padre);
				list.add(opcion);
				map.put(padre, list);
			}
		}
		
		return map;
	}
	
	public static final BigDecimal obtenerBigDecimal(String str)
	{
		BigDecimal bd;
		if(StringUtils.isNotEmpty(str) && NumberUtils.isNumber(str))
		{
			bd = new BigDecimal(StringUtils.trimToEmpty(str));
		}
		else
		{
			bd = new BigDecimal("0.0");
		}
		return bd;
	}
	
	public static final String convertirFechaString(Date fecha)
	{
		return convertirFechaString(fecha, DEFAULT_DATE_FORMAT);
	}
	
	public static final String convertirFechaString(Date fecha, String formato)
	{
		DateFormat df = new SimpleDateFormat(formato);
		return df.format(fecha);
	}
	
	
}
